import { defineStore } from 'pinia'
import type { IUserLabel } from '@/types/user'
import { isMobile } from '@/utils/currency'

import { AssetMetadata } from '@/types/AssetMetadata.ts'
import { applicationState } from '@/plugins/account.ts'

export const useStore = defineStore('useStore', {
    state: () => {
        // 安全地获取配置，避免初始化错误
        let namespaceId = ''
        let viewType = 1

        try {
            // 命名空间
            namespaceId = applicationState.getConfig('namespaceId') || ''
            // 切换视图 1:列表-默认 2:网格
            viewType = applicationState.getConfig('viewType') || 1
        } catch (error) {
            console.warn('获取应用配置失败，使用默认值:', error)
        }

        return {
            userData: null as IUserLabel | null,
            detailItem: null as any, // 是否详情页  AssetMetadata | null
            getViewType: viewType,
            pageSize: 50,
            isMobile: isMobile(),
            tableData: [] as AssetMetadata[],
            namespaceId: namespaceId
        }
    },
    actions: {
        setTableData(payload: AssetMetadata[]) {
            if (payload) {
                this.tableData = payload
            }
        },

        setNamespaceId(payload: string) {
            if (payload) {
                this.namespaceId = payload
                applicationState.setConfig('namespaceId', payload)
            }
        },
        setUser(payload: IUserLabel | null) {
            this.userData = payload
        },
        setDetail(value: AssetMetadata | null | undefined, admin = false) {
            // 名称 修改时间 上传者 所有者  大小 以及不同的类型
            this.detailItem = admin
                ? {
                      // name: '管理员',
                      // // uploader: '管理员',
                      // owner: '管理员',
                      // size: '--',
                  }
                : value
        },
        setView(value: number) {
            this.getViewType = value
            applicationState.setConfig('viewType', value)
        },
        setPageSize(value: number) {
            this.pageSize = value
        }
    }
})
